/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.escom.info.scanner.jsf;

import com.escom.administracion.dao.AlumnoDispositivoDAO;
import com.escom.administracionperfiles.hbm.dto.Alumno;
import com.escom.administracionperfiles.hbm.dto.AlumnoDispositivo;
import com.escom.administracionperfiles.hbm.dto.AlumnoDispositivoId;
import com.escom.administracionperfiles.hbm.dto.Usuarios;
import com.escom.cliente.exception.DAOException;
import com.escom.info.scanner.jsf.util.JsfUtil;
import escom.libreria.info.login.sistema.jsf.SistemaControllerDAO;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;


/**
 *
 * @author yamil
 */
public class AlumnoDispositivoController implements Serializable {

    private AlumnoDispositivoDAO ejbFacade;
    private AlumnoDispositivo current;
    private List<AlumnoDispositivo> listaAlumnoDispositivos;
    private Alumno alumno;
    private SistemaControllerDAO  sistemaController;
    private  Usuarios usuario;
 
    public SistemaControllerDAO getSistemaController() {
        return sistemaController;
    }

    public void setSistemaController(SistemaControllerDAO sistemaController) {
        this.sistemaController = sistemaController;
    }



    public Usuarios getUsuario() {
        if(usuario==null)
        {            
            try
            {
             usuario = sistemaController.getUsuarios();
            } catch (Exception ex) {
                Logger.getLogger(AlumnoDispositivoController.class.getName()).log(Level.SEVERE, null, ex);
                ex.printStackTrace();
            }
        }
        return usuario;
    }

    public void setUsuario(Usuarios usuario) {
        this.usuario = usuario;
    }


    public AlumnoDispositivo getSelected() {
       if(current==null)
       {
           current=new AlumnoDispositivo();
           current.setId(new AlumnoDispositivoId());
       }

        return current;
        
    }

    public Alumno getAlumno() {
        return alumno;
    }

    public void setAlumno(Alumno alumno) {
        this.alumno = alumno;
    }



    public void setCurrent(AlumnoDispositivo current) {
        this.current = current;
    }



    private AlumnoDispositivoDAO getEjbFacade() {
        return ejbFacade;
    }

    public void setEjbFacade(AlumnoDispositivoDAO ejbFacade) {
        this.ejbFacade = ejbFacade;
    }



    public String prepareCreate(){
        
        return "Create";
    }

    public List<AlumnoDispositivo> getListaAlumnoDispositivos(){
        try
        {
            listaAlumnoDispositivos = getEjbFacade().findAll();
        } catch (DAOException ex) {
            Logger.getLogger(AlumnoDispositivoController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return listaAlumnoDispositivos;
    }

    public String create(){
        try {
            if(getUsuario()!=null)
            {
                boolean a=getEjbFacade().finAlumnoBoletDispositivo(getAlumno().getBoleta(),getUsuario().getDireccionMac());
                current=new AlumnoDispositivo();
                current.setId(new AlumnoDispositivoId());
                current.setAlumno(getAlumno());
                current.getId().setBoleta(getAlumno().getBoleta());
                current.getId().setDireccionmac(getUsuario().getDireccionMac());
                getEjbFacade().create(current);
                JsfUtil.addSuccessMessage("Dispositivo  capturado Satisfactoriamente");
                return "View";
            }else{
                JsfUtil.addErrorMessage("Error DIRECCION MAC NO VALIDAD");
            }
        } catch (DAOException ex) {
            Logger.getLogger(AlumnoDispositivoController.class.getName()).log(Level.SEVERE, null, ex);
            JsfUtil.addErrorMessage("Error al capturar Dispositivo");
            return null;
        }
        return null;
    }

    
    public String update(){
          try {
             current.setAlumno(current.getAlumno());
            current.setId(current.getId());
            current.getId().setBoleta(current.getId().getBoleta());
            current.getId().setDireccionmac(current.getId().getDireccionmac());
            getEjbFacade().edit(current);
            JsfUtil.addSuccessMessage("AlumnoDispositivo actualizado Satisfactoriamente");
        } catch (Exception ex) {
            Logger.getLogger(AlumnoDispositivoController.class.getName()).log(Level.SEVERE, null, ex);
        }
          return "View";
    }

    public String prepareEdit(AlumnoDispositivo dominio){
        current=dominio;
        return "Edit";
    }

    public String prepareView(AlumnoDispositivo dominio){
        current=dominio;

        return "View";
    }

    public void prepareDestroy(AlumnoDispositivo dominio){
        try {
            //current=dominio;
            getEjbFacade().remove(dominio);
            JsfUtil.addSuccessMessage("AlumnoDispositivo eliminado Satisfactoriamente");
        } catch (DAOException ex) {
            Logger.getLogger(AlumnoDispositivoController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String prepareList(){
        return "List";
    }

    public String prepareAlumno(Alumno alumno){
        this.alumno = alumno;

        return "/alumnoDispositivo/List";
    }

    public List<AlumnoDispositivo> getListaDispositivoByAlumno(){
        List<AlumnoDispositivo> l =null;
        try {
            if(alumno!=null)
            l = getEjbFacade().findAlumnoByBoleta(alumno.getBoleta());
           
            return l;
        } catch (DAOException ex) {
            JsfUtil.addErrorMessage("Erroro no fue seleccionado un alumno");
            Logger.getLogger(AlumnoDispositivoController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return l;

    }

    @FacesConverter(forClass=AlumnoDispositivo.class)
    public static class AlumnoControllerConverter implements Converter {

        private static final String SEPARATOR = "#";
        private static final String SEPARATOR_ESCAPED = "\\#";

        @Override
        public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
           try{
                if (value == null || value.length() == 0)
                {
                    return null;
                }
                AlumnoDispositivoController controller = (AlumnoDispositivoController) facesContext.getApplication().getELResolver().
                getValue(facesContext.getELContext(), null, "alumnoDispositivoController");
                return controller.getEjbFacade().find(getKey(value));

           }catch(Exception e){
               e.printStackTrace();
           }
           return null;

        }

        com.escom.administracionperfiles.hbm.dto.AlumnoDispositivoId getKey(String value) {
           com.escom.administracionperfiles.hbm.dto.AlumnoDispositivoId key;
            String values[] = value.split(SEPARATOR_ESCAPED);
            key = new com.escom.administracionperfiles.hbm.dto.AlumnoDispositivoId();
            key.setBoleta(Integer.parseInt(values[0]));
            key.setDireccionmac(values[1]);
            return key;
        }

        String getStringKey(com.escom.administracionperfiles.hbm.dto.AlumnoDispositivoId value) {
            StringBuffer sb = new StringBuffer();
            sb.append(value.getBoleta());
            sb.append(SEPARATOR);
            sb.append(value.getDireccionmac());
            return sb.toString();
        }

        @Override
        public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
            if (object == null) {
                return null;
            }
            if (object instanceof AlumnoDispositivo) {
                AlumnoDispositivo o = (AlumnoDispositivo) object;
                return getStringKey(o.getId());
            } else {
                throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: "+UsuariosController.class.getName());
            }
        }





    }

}
